<?php
function __autoload($class){
    require_once '/'.$class.'.php';
}
/*
 * Controladora principal
 */

$params     = $_POST;    
if (!isset($_GET["accion"])) return;

switch ($_GET["accion"]) {
    case "login":
        MainController::login($params);
        break;    
    case "logout":
        MainController::logout();
        break;
    case "getListaActual":
        MainController::getListaActual();
        break;
    case "getListasCompras":
        MainController::getListasCompras();
        break;
    case "guardarListaCompra":
        MainController::guardarListaCompra($params);
        break;   
    case "borrarListaCompra":
        MainController::borrarListaCompra($params);
        break;
    case "comprarListaActual":
        MainController::comprarListaActual($params);
        break;
    case "getUsuarioLogueado":
        MainController::getUsuarioLogueado();
        break;
    case "getUsuarios":
        MainController::getUsuarios();
        break;
    case "guardarUsuario":
        MainController::guardarUsuario($params);
        break;
    case "borrarUsuario":
        MainController::borrarUsuario($params);
        break;
    case "actualizarLineaComprada":
        MainController::actualizarLineaComprada($params);
        break;
    case "getListaCompartida":
        MainController::getListaCompartida($params);
        break;
        
}

class MainController {   
    
    public static function guardarListaCompra($obj){
            try{
            $lista = new ListaCompra(json_encode($obj));

            $lineasStd = isset($obj["lineas"]) ? $obj["lineas"] : Array();
            $lineas = Array();

            for ( $i=0; $i<sizeof($lineasStd);$i++ ){
                $lineas[] = new LineaLista(json_encode($lineasStd[$i]));
            }
            
            $lineasABorrarSTD = isset($obj["lineasaborrar"]) ? $obj["lineasaborrar"] : Array();
            for ( $i=0; $i<sizeof($lineasABorrarSTD);$i++ ){
                $lineaABorrar = new LineaLista(json_encode($lineasABorrarSTD[$i]));
                if ($lineaABorrar->getId() > 0) $lineaABorrar->borrar();
            }            
            
            $lista->setLineas($lineas);
            $lista->setActual(true);
            $lista->guardar();
            }catch(Exception $e){
                $ret = new stdClass();
                $ret->success = false;
                $ret->msj = $e->getMessage();
                echo json_encode($ret);
                return;
            }
            $ret = new stdClass();
            $ret->success = true;
            $ret->msj = "";
            echo json_encode($ret);        
    }
    
    public static function login($obj){
            try{
                $usuario = new Usuario(json_encode($obj));
                $usuarioEnBd = $usuario->obtenerXid($usuario->getNombreUsuario());
                if ( $usuarioEnBd <> null && $usuarioEnBd->getPassword() == md5($usuario->getPassword()) ){
                    Utils::guardarSesion($usuarioEnBd);
                }else{
                    throw new Exception("Usuario/Password invalido/s.");
                }
                
        }catch(Exception $e){
               $ret = new stdClass();
               $ret->success = false;
               $ret->msj = $e->getMessage();
               echo json_encode($ret);
               return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret);         
    }
    
    public static function logout(){
        try{
            Utils::logOut();
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret);            
    }
    
    public static function getUsuarioLogueado(){
        try{
            $usuario = Utils::getUsuarioLogueado();
            if ( $usuario == null ) throw new Exception("No Hay Usuario Logueado");
            echo json_encode($usuario->toJson());
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }        
    }
    
    public static function getUsuarios(){
        try{
            $u = new Usuario();
            $usuarios = $u->obtenerTodos();
            if ( $usuarios == null || sizeof($usuarios) == 0 ) throw new Exception("No Hay Usuarios");
            
            $ret = Array();
            
            for ( $i=0; $i < sizeof($usuarios); $i++ ){
                $usuarios[$i]->setPassword("");
                $ret[] = $usuarios[$i]->toJson();
            }
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        echo json_encode($ret);
    }
    
    public static function guardarUsuario($u){
        try{
            $usuario = new Usuario(json_encode($u));
            $usuario->guardar();
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret); 
    }
    
    public static function borrarUsuario($u){
        try{
            $usuario = new Usuario(json_encode($u));            
            //Chequeo que al menos quede un usuario en el sistema para borrar este
            $usuariosTotales = $usuario->obtenerTodos();
            //Chequeo que no se intente borrar al usuario logueado
            $usuarioLogueado = Utils::getUsuarioLogueado();
            if ( $usuariosTotales == null || sizeof($usuariosTotales) == 1 ){
                throw new Exception("No se pueden eliminar todos los usuarios del sistema.");
            }
            if ( $usuarioLogueado <> null && $usuarioLogueado->getNombreUsuario() == $usuario->getNombreUsuario() ){
                throw new Exception("No se puede eliminar a usted mismo.");
            }
            $usuario->borrar();
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret);
    }
    
    public static function getListaActual(){
        try{
            $listaActual = Utils::getListaActual();                    
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        echo json_encode($listaActual->toJson());
    }
    
    public static function comprarListaActual($obj){
        try{
            $lista = new ListaCompra(json_encode($obj));
            $lista->setEstado("comprando");
            $lista->guardar();
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret);       
    }
    
    public static function borrarListaCompra($obj){
        try{
            $lista = new ListaCompra(json_encode($obj));
            $lista->borrar();
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret);
    }
    
    public static function getListasCompras(){
        try{
            $l = new ListaCompra();
            $listaCompra = $l->obtenerTodos();            
            if ( $listaCompra == null || sizeof($listaCompra) == 0 ) throw new Exception("No Hay Listas disponibles");            
            $ret = Array();            
            for ( $i=0;$i<sizeof($listaCompra);$i++ ){
                $ret[] = $listaCompra[$i]->toJson();
            }            
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        echo json_encode($ret);
    }
    
    public static function actualizarLineaComprada($obj){
        try{            
            $linea = new LineaLista(json_encode($obj));
            $linea->guardar();
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = $e->getMessage();
            echo json_encode($ret);
            return; 
        }
        $ret = new stdClass();
        $ret->success = true;
        $ret->msj = "";
        echo json_encode($ret);
    }
    
    public static function getListaCompartida($obj){
        $ret;
        try{            
            $ret = Utils::getListaCompartida($obj);
            echo json_encode($ret->toJson());
        }catch(Exception $e){
            $ret = new stdClass();
            $ret->success = false;
            $ret->msj = "No se ha podido conectar, posibles motivos: password invalido, lista de compra ya no esta disponible.";
            echo json_encode($ret);
            return;
        }
        
    }
}
?>
